<?php

/* 
NAVODILA: 
KanbanMaster lahko kreira novo tablo in (dokler je prazna) spreminja njeno strukturo.

Vsaka tabla lahko prikazuje enega ali več projektov. Vsak projekt ima svojo plavalno progo. 
 * Omejitev WIP je skupna za vse projekte na tabli. Večje število projektov na isti tabli je smiselno, 
 * če na vseh dela ista (ali zelo podobna) razvojna skupina.

Kreiranje table poteka z zaporednim dodajanjem stolpcev. (Prvi stolpec se doda v prazno tablo, 
 * ostali stolpci pa se dodajo levo ali desno od obstoječega stolpca.) Posamezni stolpci so lahko 
 * sestavljeni iz več podstolpcev. Za vsak stolpec in podstolpec je treba ob kreiranju zajeti ustrezne atribute, 
 * ki jih lahko kasneje spremenimo. Stolpci in podstolpci, ki ne vsebujejo kartic, se lahko brišejo. 
 * Mejna stolpca označujeta, kje se dejansko začne in konča razvoj.

# Preveri dodajanje stolpca v prazno tablo.
# Preveri zajem vseh atributov stolpca (ime, omejitev WIP, mejni stolpec, stolpec kartic z najvišjo prioriteto, stolpec za sprejemno testiranje).
# Preveri dodajanje stolpca v obstoječo tablo (levo/desno od obstoječega stolpca).
# Preveri dodajanje stolpca s podstolpci.
# Preveri zajem vseh atributov podstolpca (ime, omejitev WIP, mejni stolpec, stolpec kartic z najvišjo prioriteto, stolpec za sprejemno testiranje).
# Preveri dodajanje podstolpca v stolpec, ki že obstaja, a nima podstolpcev (uporabnik se je naknadno odločil, da bo stolpec razdelil na podstolpce).
# Preveri dodajanje podstolpca v stolpec, ki že ima podstolpce.
# Preveri brisanje praznega stolpca (pri brisanju mejnih stolpcev, stolpca za kartice z najvišjo prioriteto in stolpca za sprejemno testiranje je potrebna nova nastavitev teh stolpcev).
# Preveri brisanje stolpca s karticami (prepovedano, kartice je treba najprej pobrisati ali prestaviti drugam).
# Preveri brisanje praznega podstolpca.
# Preveri brisanje podstolpca s karticami (prepovedano, kartice je treba najprej pobrisati ali prestaviti drugam).
# Preveri, ali se po brisanju zadnjega podstolpca stolpec obnaša kot navaden stolpec brez podstolpcev.
# Preveri dodajanje novega projekta (odpre se nova plavalna proga; če na dodanem projektu dela druga razvojna skupina, naj se izpiše opozorilo).
# Preveri odvzemanje projekta (plavalna proga se odstrani).
 */

extract(extractPost(), EXTR_PREFIX_ALL, 'b');
if(isset($b_name) && isset($b_projects) && isset($b_group_id)){
    
    $existing_board = R::findOne('board',' name = ? ', 
                                               array( $b_name )
                                              );
    if($existing_board){
        jsonErrorDie("Board with provided name = $b_name is already in use. Please use another one.");
    }
           
    $devGroup = R::load('group', $b_group_id);
    if($devGroup->id == 0){
        jsonErrorDie("Developer group with provided group id = $b_group_id does not exist.");
    }
    $board = R::dispense( 'board' );
    $board->name = $b_name;
    $board->group = $devGroup;
    $board->date_created = getCurrentDate();
    $board->sharedBoardColumns = array();
    if(!isset($b_wip)){
        $b_wip = -1; // Work In Progress not set yet
    }
    $board->wip = $b_wip;

    $projects = array();
    
    foreach(json_decode($b_projects) as $proj_id){
        $proj = R::load('project', $proj_id);
        // Check for non-existing projects, otherwise you can use loadAll
        if($proj->board_id != null){
            jsonErrorDie("Project '". $proj->name. "' already belong to another board.");
        }
        if($proj->id == 0){
            jsonErrorDie("Project with given id=". $proj_id ." does not exist.");
        }
        $projects[] = $proj;
    }

    $board->ownProjectList = $projects;
    $boardId = R::store($board);

    jsonSuccessDie("board_id", $boardId);
}
jsonErrorDie("Not all mandatory parameters set!");

